package com.victor.common.constant.factory;

import com.victor.common.constant.cache.Cache;
import com.victor.common.constant.cache.CacheKey;
import com.victor.common.persistence.model.AudienceCode;
import com.victor.common.persistence.model.User;
import com.victor.common.persistence.model.UsersImages;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * 常量生产工厂的接口
 */
public interface IConstantFactory {



    /**
     * 获取除 管理员 与超级管理员外所有用户
     *
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.USERNOTADMIN + "'")
    List<User> getUserIsNotAdmin();



    /**
     * 根据用户id获取用户
     *
     * @param userId
     * @return
     */
    User getUserById(Integer userId);

    /**
     * 根据用户id获取用户名称
     *
     * @param userId
     * @return
     */
    String getUserNameById(Integer userId);

    /**
     * 根据用户id获取用户账号
     *
     * @param userId
     * @return
     */
    String getUserAccountById(Integer userId);


    /**
     * 通过角色ids获取角色名称
     *
     * @param roleIds
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.ROLES_NAME + "'+#roleIds")
    String getRoleName(String roleIds);

    /**
     * 通过角色id获取角色名称
     *
     * @param roleId
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_NAME + "'+#roleId")
    String getSingleRoleName(Integer roleId);

    /**
     * 通过角色id获取角色英文名称
     *
     * @param roleId
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SINGLE_ROLE_TIP + "'+#roleId")
    String getSingleRoleTip(Integer roleId);
    /**
     * @Auther:Victor
     * @Description: 用户上传的图片集合
     * @Date:Create in 15:58 2018/4/21
     * @Modified By:
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.USERS_IMAGE_LIST + "'+#userid")
    List<UsersImages> getUsersImageList(Integer userid);
    /**
     * 通过ID获取商业编码名称
     *
     * @param code
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.AUDIENCE_NAME + "'+#code")
    String getAudienceName(String code);
    /**
     * 通过ID获取婚纱-婚纱名称
     *
     * @param id
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.WEDDING_DRESS_NAME + "'+#id")
    String getWeddingDressName(Integer id,Integer type);

    /**
     * 获取商业编码列表
     *
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.AUDIENCE_BUSINESS_LIST + "'")
    List<AudienceCode> getBusinessList();
    /**
     * 获取行业编码列表
     *
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.AUDIENCE_INDUSTRY_LIST + "'")
    List<AudienceCode> getIndustryList();
    /**
     * 获取属性编码列表
     *
     * @return
     */
    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.AUDIENCE_PROPERTY_LIST + "'")
    List<AudienceCode> getPropertyList();


    /**
     * 获取菜单的名称们(多个)
     *
     * @param menuIds
     * @return
     */
    String getMenuNames(String menuIds);

    /**
     * :获取菜单名称
     *
     * @param menuId
     * @return
     */
    String getMenuName(Integer menuId);

    /**
     * 获取菜单名称通过编号
     *
     * @param code
     * @return
     */
    String getMenuNameByCode(String code);
    /**
     * 获取商业性质名称通过编号
     *
     * @param code
     * @return
     */
    String getAudienceNameByCode(String code);

    /**
     * 获取性别名称
     *
     * @param sex
     * @return
     */
    String getSexName(Integer sex);

    /**
     * 获取用户登录状态
     *
     * @param status
     * @return
     */
    String getStatusName(Integer status);

    /**
     * 获取菜单状态
     *
     * @param status
     * @return
     */
    String getMenuStatusName(Integer status);

    /**
     * 获取被缓存的对象(用户删除业务)
     *
     * @param para
     * @return
     */
    String getCacheObject(String para);

    /**
     * 获取最后登入时间
     *
     * @param userId
     * @return
     */
    String getLastLoginTime(Integer userId);

}
